package com.lanyou.esb.cook.proxy.service;

import com.lanyou.esb.cook.proxy.entity.Http;
import com.lanyou.esb.cook.proxy.entity.Token;
import com.lanyou.esb.cook.proxy.exception.AuthException;
import com.lanyou.esb.cook.proxy.meta.Environment;

/**
 * 授权服务接口
 * 
 * @author Davey.wu
 */
public interface AuthService {
	/**
	 * 获取令牌信息
	 * 
	 * @param systemCode
	 *            ：系统编码
	 * @param callSystemCode
	 *            ：调用方系统编码
	 * @param http
	 *            ：接口
	 * @param environment
	 *            ：环境：PRODUCTION：正式环境, TEST：测试环境;
	 * @return
	 * @throws Exception
	 */
	Token getToken(String systemCode, String callSystemCode,
			Http http, Environment environment) throws Exception;

	/**
	 * 授权
	 * 
	 * @param applyKey
	 *            ：密钥
	 * @param systemCode
	 *            ：系统编码
	 * @param ifCode
	 *            ：接口编码
	 * @param ifVersion
	 *            ：接口版本
	 * @param environment
	 *            ：环境：PRODUCTION：正式环境, TEST：测试环境;
	 * @return
	 * @throws AuthException
	 * @throws Exception
	 */
	Token authenticate(String applyKey, String systemCode, String ifCode,
			String ifVersion, Environment environment) throws AuthException,
			Exception;

	/**
	 * 令牌每日申请上限
	 * 
	 * @return
	 */
	int getApplyUpperLimit();

	/**
	 * 获取访问令牌有效期
	 * 
	 * @return
	 */
	int getExpiresIn();

	/**
	 * 生成访问令牌
	 * 
	 * @return
	 */
	String generateAccessToken();

}
